# Менеджер контекста with as
# Суть применения
'''
Менеджер контекста with as в Python предоставляет удобный способ работы с ресурсами, 
которые должны быть явно открыты и закрыты. Он гарантирует, 
что ресурсы будут корректно закрыты, даже в случае исключения.
'''
# Синтаксис with as выглядит следующим образом:
# with выражение as переменная:
#     блок кода
'''
выражение обычно используется для открытия ресурса, например, файлового объекта, 
базы данных или сетевого соединения. переменная будет ссылаться на этот ресурс 
внутри блока кода. По завершении блока кода, ресурс автоматически будет закрыт.
'''



# Давайте рассмотрим пример с открытием файла и записью в него:
with open('example.txt', 'w') as file:
    file.write('Привет, мир!')
'''
В этом примере мы открываем файл example.txt в режиме записи ('w') 
и присваиваем его объект переменной file. Затем мы записываем 
строку 'Привет, мир!' в файл. По завершении блока кода, файл 
будет автоматически закрыт, и все изменения будут сохранены.
Если произойдет исключение внутри блока кода, менеджер 
контекста with as все равно гарантирует, что ресурс будет корректно закрыт. 
'''
# Например:
with open('example.txt', 'w') as file:
    file.write('Привет, мир!')
    raise Exception('Произошла ошибка')

'''
В этом примере мы генерируем исключение после записи в файл. 
Несмотря на исключение, файл будет корректно закрыт.

Таким образом, использование менеджера контекста with as позволяет и
збежать ручного закрытия ресурсов и гарантирует их корректное освобождение, 
даже при возникновении исключений. Это делает код более чистым, безопасным и эффективным.
'''












# r = open('file.txt', 'a', encoding='utf-8')
# r.write('something' + '\n')
# r.write('что-то')
# r.close()

# print('Все норм')


# with open("file.txt", "a", encoding="utf-8") as r:
#     r.write("something" + "\n")

#     r.write("что-то")
# print("Все норм")


# r = open('file.txt', 'a', encoding='utf-8')
# try:
#     r.write('something' + '\n')
#     r.write('что-то')
# finally:
#     r.close()

# print('Все норм')


# Открываем файл "file.txt" в режиме добавления (append) и указываем кодировку utf-8.
# Используем оператор "with", чтобы автоматически закрыть файл после завершения операций.
with open("file.txt", "a", encoding="utf-8") as r:
    # Записываем строку "something" в файл и добавляем символ новой строки.
    r.write("something" + "\n")

    # Записываем строку "что-то" в файл.
    r.write("что-то")

# Выводим сообщение "Все норм" в консоль.
print("Все норм")
